/**
 * Copyright &copy; 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.oplink.webbase.common.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.lang3.time.DateFormatUtils;

/**
 * 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
 * 
 * @author ThinkGem
 * @version 2013-3-15
 */
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {

	private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
			"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" };

	/**
	 * 得到当前日期字符串 格式（yyyy-MM-dd）
	 */
	public static String getDate() {
		return getDate("yyyy-MM-dd");
	}

	/**
	 * 得到当前日期字符串 格式（yyyy-MM-dd） pattern可以为："yyyy-MM-dd" "HH:mm:ss" "E"
	 */
	public static String getDate(String pattern) {
		return DateFormatUtils.format(new Date(), pattern);
	}

	/**
	 * 得到日期字符串 默认格式（yyyy-MM-dd） pattern可以为："yyyy-MM-dd" "HH:mm:ss" "E"
	 */
	public static String formatDate(Date date, Object... pattern) {
		String formatDate = null;
		if ((pattern != null) && (pattern.length > 0)) {
			formatDate = DateFormatUtils.format(date, pattern[0].toString());
		} else {
			formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
		}
		return formatDate;
	}

	/**
	 * 得到当前时间字符串 格式（HH:mm:ss）
	 */
	public static String getTime() {
		return formatDate(new Date(), "HH:mm:ss");
	}

	/**
	 * 得到当前日期和时间字符串 格式（yyyy-MM-dd HH:mm:ss）
	 */
	public static String getDateTime() {
		return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
	}

	/**
	 * 得到当前年份字符串 格式（yyyy）
	 */
	public static String getYear() {
		return formatDate(new Date(), "yyyy");
	}

	/**
	 * 得到当前月份字符串 格式（MM）
	 */
	public static String getMonth() {
		return formatDate(new Date(), "MM");
	}

	/**
	 * 得到当天字符串 格式（dd）
	 */
	public static String getDay() {
		return formatDate(new Date(), "dd");
	}

	/**
	 * 得到当前星期字符串 格式（E）星期几
	 */
	public static String getWeek() {
		return formatDate(new Date(), "E");
	}

	/**
	 * 日期型字符串转化为日期 格式
	 * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
	 * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }
	 */
	/*
	 * public static Date parseDate(Object str) {
	 * if (str == null) {
	 * return null;
	 * }
	 * try {
	 * return parseDate(str.toString(), parsePatterns);
	 * } catch (ParseException e) {
	 * return null;
	 * }
	 * }
	 */

	/**
	 * 获取过去的天数
	 * 
	 * @param date
	 * @return
	 */
	public static long pastDays(Date date) {
		long t = new Date().getTime() - date.getTime();
		return t / (24 * 60 * 60 * 1000);
	}
	
	
	public static Date getNowDate() {
		String thisDate = DateUtils.getDate(parsePatterns[1]);
		SimpleDateFormat fmtrq = new SimpleDateFormat(parsePatterns[1], Locale.CHINA);
		Date nowDate = new Date();
		try {
			nowDate = fmtrq.parse(thisDate);
		} catch (Exception ex) {
			ex.getMessage();
		}
		return nowDate;
	}
	
	/**
	 * Date 类型转 String
	 * @param dat
	 * @param format
	 * @return
	 */
	public static String getDateString(Date date, String format){
		SimpleDateFormat sdf=new SimpleDateFormat(format);  
		if (date==null){
			date=new java.util.Date();
		}
		String str=sdf.format(date); 
		return str;
	}
	
	public static Date getStringDate(String dat, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		java.util.Date date = new Date();
		try {
			date = sdf.parse(dat);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 获取当月第一天
	 * @return
	 */
	public static String getfirstDay() {
		Calendar c = Calendar.getInstance();
		SimpleDateFormat format = new SimpleDateFormat(parsePatterns[2]);
		c.add(Calendar.MONTH, 0);
		c.set(Calendar.DAY_OF_MONTH, 1);
		String first = format.format(c.getTime());
		return first;
	}
	
	/**
	 * 时间格式一定要是 "yyyy/MM/dd HH:mm:ss"这种类型
	 * @param time
	 * @return
	 * @throws ParseException 
	 */
	public static Calendar getCalendar(String time) {
		try{
			Calendar c = Calendar.getInstance();
			SimpleDateFormat format = new SimpleDateFormat(parsePatterns[1]);
			Date d = format.parse(time);
			c.setTime(d);
			return c;
		}catch(ParseException e){
			return null;
		}
	}
	
	public static String calendar2String(Calendar time) {
		Date d = time.getTime();
		return getDateString(d, parsePatterns[1]);
	}
	/**
	 * @param args
	 * @throws ParseException
	 */
	public static void main(String[] args) throws ParseException {
		// System.out.println(formatDate(parseDate("2010/3/6")));
		// System.out.println(getDate("yyyy年MM月dd日 E"));
		// long time = new Date().getTime()-parseDate("2012-11-19").getTime();
		// System.out.println(time/(24*60*60*1000));
		Calendar c = getCalendar("2012-12-27 12:12:12");
		System.out.println(c);
		
	}
}
